# encoding: utf-8
"""
@Author: xiaxin
@ModuleName: findlst_towsum
@Time: 2020/3/5 
@Desc:
"""


# 2、给定一个整型列表，请实现从其中找出2个数的和为某一个指定的值？
# 如：lst =[1,5,2,7,4,9]，指定的目标值为11，可以从中找出 2和9之和为11


def list_sum(lst: list, num: int):
    sum_lst = []

    # 迭代lst列表, 当num - lst中的值 in 列表中的时候, 把两个值追加到sum_lst中, 并移除当前迭代的值,去重
    for i in lst:
        other_num = num - i
        if other_num in lst:
            sum_lst.append((i, other_num))
            lst.pop(i)

    return sum_lst


if __name__ == '__main__':
    print(list_sum([1, 5, 2, 7, 4, 9], 11))

# 思路是对的，但是在循环的过程中，去操作被循环的对象，是非常危险的。例如你这里的代码中，如果有两个9的时候，即
# lst = [1, 5, 2, 7, 4, 9, 9]，那么你这里还能得到正确的结果吗？